有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用@BindingResult和@Validated

注意: 当我搜索@valid vs @validated时,我读了几乎所有的stack post,但找不到答案,所以我发布了这篇文章

我很困惑@Validated在这里做什么。如果inputParms无效,它会抛出javax.validation.ConstraintViolationException,甚至不会进入代码内部。但是,如果我用@Valid替换@Validated,则不会引发异常,并且bindingResult.hasErrors()正在捕获它

@RestController
@Validated // what is this doing ??
public class MyRestController{
    @PostMapping(value="/my-data",produces= {MediaType.APPLICATION_JSON_UTF8_VALUE})
    public ResponseEntity<?> doSomething(@Valid @RequestBody MyInputParam inputParms,BindingResult bindingResult){
        if(bindingResult.hasErrors()) {
            //do something here
        }
    }
}

所以如果我使用@ValidatedBindingResult一点用处都没有? 甚至仅仅是@Validated@Valid的不同之处


共 (1) 个答案

  1. # 1 楼答案

    Difference between @Valid and @Validated in Spring

    在您的特殊情况下,问题是@Validated@Valid混合。解决此问题的选项:

    • 移除类上声明的@Validated,并使用@Validated@Valid作为参数
    • 在两个位置(类和参数)使用@Valid@Validated
    @RestController
    public class MyRestController {
    
        @PostMapping(value = "/my-data", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
        public ResponseEntity<?> doSomething(@Validated @RequestBody MyInputParam inputParms, 
                                             BindingResult bindingResult) {
            if(bindingResult.hasErrors()) {
                //do something here
            }
        }
    
    }